package com.wenlin.myproduction.util;


import com.wenlin.myproduction.bean.RosterBean;
import com.wenlin.myproduction.bean.RosterSelectBean;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @author 文琳_377979485@qq.com
 * @time 2021/10/13 0013 上午 11:22
 * @desc 班次管理相关的工具类
 */
public class RosterUtil {

    private static String[] ARR_WEEK_FAKE_DATA = {"<p>星期五</p><p>09-29</p><p class=\"orange\">中秋节</p>",
            "<p>星期六</p><p>09-30</p>",
            "<p>星期日</p><p>10-01</p><p class=\"orange\">国庆节</p>",
            "<p>星期一</p><p>10-02</p>",
            "<p>星期二</p><p>10-03</p>",
            "<p>星期三</p><p>10-04</p>",
            "<p>星期四</p><p>10-05</p>"};

    public static List<String> getCurrentWeekList() {
        return Arrays.asList(ARR_WEEK_FAKE_DATA);
    }

    /**
     * 获取所有的排班类型列表
     *
     * @return 所求
     */
    public static List<RosterSelectBean> getList() {
        List<RosterSelectBean> list = new ArrayList<>();
        String[] arrRosterTypes = ValCommon.ROSTER_TYPES;
        for (int i = 0; i < arrRosterTypes.length; i++) {
            boolean isNight = arrRosterTypes[i].equals("夜班");
            list.add(new RosterSelectBean(String.valueOf(i), arrRosterTypes[i], 0, isNight ? 2 : 1, isNight ? "18:00" : "6:00", isNight ? "6:00" : "18:00", i <= 1 ? "12" : "0"));
        }
        return list;
    }

    /**
     * 获取格式化的开始时间，格式：当日 08:10
     *
     * @param bean 班次对象
     * @return 所求
     */
    public static String getFormatStartTime(RosterBean bean) {
        return getThisDayOrNextDayName(bean.getStart_type()) + " " + bean.getStart_time();
    }

    /**
     * 获取格式化的结束时间，格式：当日 08:10
     *
     * @param bean 班次对象
     * @return 所求
     */
    public static String getFormatEndTime(RosterBean bean) {
        return getThisDayOrNextDayName(bean.getEnd_type()) + " " + bean.getEnd_time();
    }

    /**
     * 获取格式化的起止时间，格式：当日 08:10
     *
     * @param bean 班次对象
     * @return 所求
     */
    public static String getFormatStartAndEndTime(RosterBean bean) {
        return getThisDayOrNextDayName(bean.getStart_type()) + bean.getStart_time() + "-" + getThisDayOrNextDayName(bean.getEnd_type()) + bean.getEnd_time();
    }

    /**
     * 获取格式化的起止时间，格式：当日 08:10
     *
     * @param bean 班次对象
     * @return 所求
     */
    public static String getFormatStartAndEndTime(RosterSelectBean bean) {
        return getThisDayOrNextDayName(bean.getStart_type()) + bean.getStart_time() + "-" + getThisDayOrNextDayName(bean.getEnd_type()) + bean.getEnd_time();
    }

    /**
     * 返回个格式化的班次时长
     *
     * @param bean 班次对象
     * @return 所求
     */
    public static String getFormatDuration(RosterBean bean) {
        return Checker.notNull(bean) && Checker.hasWord(bean.getDuration()) ? bean.getDuration() + "小时" : "";
    }

    /**
     * 通过班次类型名称获取班次类型值
     *
     * @param typeName 班次类型名称
     * @return 所求
     */
    public static String getTypeValue(String typeName) {
        if (Checker.hasNoWord(typeName)) return "";
        String[] rosterTypes = ValCommon.ROSTER_TYPES;
        for (int i = 0; i < rosterTypes.length; i++) {
            if (typeName.equals(rosterTypes[i])) {
                return String.valueOf(i + 1);//1是夜班，夜班的位置角标是0
            }
        }
        return "";
    }

    /**
     * 通过班次类型值获取班次类型名称
     *
     * @param type 班次类型值
     * @return 所求
     */
    public static String getTypeName(int type) {
        return ValCommon.ROSTER_TYPES[type - 1];
    }

    /**
     * 通过分析时间字符串获取是当日还是次日
     *
     * @param time 时间字符串
     * @return 所求
     */
    public static String getThisDayOrNextDayValue(String time) {
        if (Checker.hasNoWord(time)) return "";
        if (time.contains(ValCommon.NEXT_DAY)) return "2";
        else if (time.contains(ValCommon.THIS_DAY)) return "1";
        else return "";
    }

    /**
     * 通过当日次日的值获取“当日”或者“次日”字符串
     *
     * @param value 当日次日值
     * @return 所求
     */
    public static String getThisDayOrNextDayName(int value) {
        return value == 1 ? ValCommon.THIS_DAY : value == 2 ? ValCommon.NEXT_DAY : "";
    }

    /**
     * 通过分析时间字符串获取小时数和分钟数
     *
     * @param time 时间字符串
     * @return 所求
     */
    public static String[] getHourMinuteValueArr(String time) {
        String[] arr = {"", ""};
        if (Checker.hasNoWord(time)) return arr;
        if (time.contains(" ")) {
            String[] arrTemp = time.split(" ");
            time = arrTemp[1];
        }
        if (time.contains(":")) {
            arr = time.split(":");
            return arr;
        }
        return arr;
    }

    /**
     * 获取天的值
     *
     * @param dayStr 天的字符串，当日或次日
     * @return 所求
     */
    public static int getIntDay(String dayStr) {
        int day = 0;
        if (Checker.hasWord(dayStr) && dayStr.equals(ValCommon.NEXT_DAY)) return 1;
        return day;
    }

    /**
     * 获取时的值
     *
     * @param hourStr 时的字符串
     * @return 所求
     */
    public static int getIntHour(String hourStr) {
        int hour = 0;
        if (Checker.hasWord(hourStr)) {
            try {
                hour = Integer.parseInt(hourStr);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return hour;
    }

    /**
     * 获取分的值
     *
     * @param minuteStr 分的字符串
     * @return 所求
     */
    public static int getIntMinute(String minuteStr) {
        int minute = 0;
        if (Checker.hasWord(minuteStr)) {
            try {
                minute = Integer.parseInt(minuteStr);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return minute;
    }
}
